package edu.northwestern.cbits.purple_robot_manager.tests;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import junit.framework.Assert;
import org.json.JSONException;
import org.json.JSONObject;
import org.mozilla.javascript.NativeJavaObject;
import android.content.Context;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.scripting.BaseScriptEngine;
import edu.northwestern.cbits.purple_robot_manager.triggers.DateTrigger;
import edu.northwestern.cbits.purple_robot_manager.triggers.Trigger;
import edu.northwestern.cbits.purple_robot_manager.triggers.TriggerManager;
public class RandomDateTriggerTestCase extends RobotTestCase
{
public RandomDateTriggerTestCase(Context context, int priority)
{
super(context, priority);
}
@Override
public void test()
{
if (this.isSelected(this._context) == false)
return;
TriggerManager triggers = TriggerManager.getInstance(this._context);
this.broadcastUpdate("Clearing triggers...");
triggers.removeAllTriggers();
Assert.assertEquals("RRRDT0", 0, triggers.allTriggers().size());
long[] intervals =
{ 600000, 900000, 1800000, 3600000, 7200000, 14400000 };
for (long interval : intervals)
{
BaseScriptEngine.runScript(this._context, "PurpleRobot.persistString('repeat-test-token', '');");
NativeJavaObject persisted = (NativeJavaObject) BaseScriptEngine.runScript(this._context, "PurpleRobot.fetchString('repeat-test-token');");
Assert.assertEquals("RRDT1-" + interval, "", persisted.unwrap()); // TODO:
// Unwrap at
// scripting
// engine?
long now = System.currentTimeMillis();
String triggerId = "random-date-test-" + now;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
try
{
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(now + interval);
JSONObject triggerDef = new JSONObject();
triggerDef.put("type", "datetime");
triggerDef.put(Trigger.NAME, "Random Date Test");
triggerDef.put(Trigger.IDENTIFIER, triggerId);
triggerDef.put(Trigger.ACTION, "PurpleRobot.playDefaultTone(); PurpleRobot.testLog('Date Test: Random Fired!'); PurpleRobot.persistString('repeat-test-token', 'run'); PurpleRobot.vibrate('SOS');");
triggerDef.put(DateTrigger.DATETIME_START, sdf.format(new Date(now)));
triggerDef.put(DateTrigger.DATETIME_END, sdf.format(new Date(cal.getTimeInMillis())));
triggerDef.put(DateTrigger.DATETIME_RANDOM, true);
String script = "PurpleRobot.updateTrigger('" + triggerId + "', " + triggerDef.toString().replace("'", "\\'").replace("\"", "'") + ");";
BaseScriptEngine.runScript(this._context, script);
this.broadcastUpdate("Created random trigger. Sleeping...");
Thread.sleep(interval);
}
catch (JSONException e)
{
Assert.fail("RRDT2-" + interval);
}
catch (InterruptedException e)
{
Assert.fail("RRDT3-" + interval);
}
this.broadcastUpdate("Verifying random trigger fired...");
persisted = (NativeJavaObject) BaseScriptEngine.runScript(this._context, "PurpleRobot.fetchString('repeat-test-token');");
Assert.assertEquals("RRDT4-" + interval, "run", persisted.unwrap());
}
this.broadcastUpdate("Clearing triggers...");
triggers.removeAllTriggers();
}
@Override
public int estimatedMinutes()
{
return 60 * 16;
}
@Override
public String name(Context context)
{
return context.getString(R.string.name_random_date_trigger_test);
}
}